// common/debounce.js
let timeout = null;

/**
 * 防抖函数
 * @param {Function} func - 需要防抖的真实要执行的函数
 * @param {number} wait - 防抖延迟时间（毫秒），默认500ms
 * @param {boolean} immediate - 是否立即执行（true表示触发后立即先执行一次，wait秒内不再触发才能再次执行）
 * @return {function} - 返回一个经过防抖处理的新函数
 */
function debounce(func, wait = 500, immediate = false) {
  // 清除已有的定时器
  if (timeout !== null) clearTimeout(timeout);
  
  if (immediate) {
    // 立即执行版本
    let callNow = !timeout;
    timeout = setTimeout(() => {
      timeout = null;
    }, wait);
    if (callNow) typeof func === 'function' && func();
  } else {
    // 非立即执行版本（默认）：延迟执行
    timeout = setTimeout(() => {
      typeof func === 'function' && func();
    }, wait);
  }
}

export default debounce;